package demo7;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

//Spring容器管理对象时,一个对象生命周期对应
@Component
public class Person {
    private String name;

    public Person() {
        System.out.println("1.Person的构造器被调用了");
    }
    public Person(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    @Value("张三")
    public void setName(String name) {
        System.out.println("2.name的set方法被调用了,初始化了name属性");
        this.name = name;
    }

    public void play() {
        System.out.println(name+"出去玩");
    }

    //Spring容器提供了针对对象生命周期特定节点的注解:
    //@PostConstruct注解 当一个对象被Spring容器初始化完毕后,会调用这个方法,通知对象初始化完成
    @PostConstruct
    public void init(){
        System.out.println("3.Spring容器将Person对象初始化完毕了name:"+name);
    }
    /**
     * @PreDestroy注解,当Spring容器关闭时,会调用内部所有对象被@PreDestroy注解标注的方法.通知其脱离Spring
     * 容器管理(销毁前).
     *
     */
    @PreDestroy
    public void preDestroy(){
        System.out.println("5:容器要关闭了,通知当前对象");
    }
}
